package com.ww.java8.fp.stream.onjava8.ch14;

import com.ww.java8.fp.FileToWordsBuilder;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class SplitStreamRegexpDemo {

    private String all;

    public SplitStreamRegexpDemo(String filePath) throws IOException {
        all = Files.lines(Paths.get(filePath))
                .skip(1)
                .collect(Collectors.joining(" "));
    }

    /**
     * 可以多次调用stream()，每次从已存储的字符串中创建一个新的流，这里有一个限制，整个文件必须存储在内存中；在大多数情况下是没有问题的，但是
     * 这丢掉了流操作非常重要的优势：
     * 1、“不需要把流存储起来”，当然，流确实需要一些内部存储，但存储的只是序列的一小部分，和存储整个序列不同；
     * 2、它们是懒加载计算的；
     * @return
     */
    public Stream<String> stream() {
        return Pattern.compile("[ .,?]+").splitAsStream(all);
    }

    public static void main(String[] args) throws IOException {
        SplitStreamRegexpDemo streamRegexpDemo = new SplitStreamRegexpDemo(SplitStreamRegexpDemo.class.getResource("/").getPath().substring(1) + "Cheese.dat");
        streamRegexpDemo.stream()
                .limit(7)
                .map(w -> w + " ")
                .forEach(System.out::print);
        streamRegexpDemo.stream()
                .skip(7)
                .limit(2)
                .map(w -> w + " ")
                .forEach(System.out::print);
    }
}
